package netty.study.first;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;

/**
 * @author songZiHao
 * @version 1.0.0
 * @ClassName TestServer.java
 * @Description TODO
 * @createTime 2020年04月10日 14:42:00
 */
public class TestServer {
	/**
	 * loopGroup（接收请求，交给管道处理）
	 *      ->ChannelInitializer（初始化管道的时候调用initChannel方法，按照顺序调用channelHandler）
	 *         ->channelHandler（调用处理请求的方法channelRead0，并返回）
	 */
	public static void main(String[] args) throws InterruptedException {
		//从客户端接收连接的线程组，接收连接交给workerGroup
		NioEventLoopGroup bossGroup = new NioEventLoopGroup();
		//完成bossGroup给的连接的处理，处理完成之后交给bossGroup
		NioEventLoopGroup workerGroup = new NioEventLoopGroup();
		try {
			//简化启动用的启动类
			ServerBootstrap serverBootstrap = new ServerBootstrap();
			serverBootstrap.group(bossGroup, workerGroup)//设置父子线程组，父（接收连接），子（处理链接）
					.channel(NioServerSocketChannel.class)//创建管道
					.childHandler(new TestServerInitializer());//处理channel中的请求

			ChannelFuture channelFuture = serverBootstrap.bind(8899).sync();
			channelFuture.channel().closeFuture().sync();
		}finally {
			bossGroup.shutdownGracefully();
			workerGroup.shutdownGracefully();
		}
	}

	public void  testOne(){
		try {
			this.wait();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}
